package concurrency.basicthreading.demo;
import java.util.concurrent.TimeUnit;

/**
 * 后台线程，是指在程序运行的时候在后台提供一种通用的服务的线程。当所有非后台线程结束时，程序也就终止了。
 * 同时会杀死进程中所有的后台线程。(反过来说，只要有任何非后台线程还在运行，程序就不会终止)
 * 
 * 下面的例子中：主线程在没有结束时，后台线程会一直打印结果。一旦主线程结束所有的后台线程将被杀死。
 * 
 * 当我们注释掉daemo.setDaemon(true) 此时所有的线程都是非后台线程。。当主线程结束时非后台线程仍然不停地打印结果。
 */
public class Demo07DaemonThread implements Runnable {
	public void run() {
		while(true) {
			try {
				TimeUnit.MILLISECONDS.sleep(1);
				System.out.println(Thread.currentThread() + "  " + this);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}	
		}
	}

	public static void main(String[] args) throws Exception {
		for ( int i = 0; i < 10; i++) {
			Thread daemo = new Thread(new Demo07DaemonThread());
			//注意setDaemon()方法必须在start()方法之前调用。
			//daemo.setDaemon(true);
			daemo.start();
		}
		
		System.out.println("All daemons started");
		TimeUnit.MILLISECONDS.sleep(1);
	}
}
